عوامل جلوگیری کننده از موازی سازی عبارتند از :.هزینه I/O.هماهنگی/رقابت ممکن است یک برنامه sequential بهتر از یک برنامه موازی باشد بطور مثال یک عدد 000 رقمی به توان یک عدد طوالنی اینکه الگوریتم را چگونه انتخاب کنیم بهینه باشد و بعد از آنکه بهنیه بودن الگوریتم ثابت شد الگوریتم را موازی می کنیم. الگوریتمی که غیر بهینه است بخواهیم موازی کنیم گاهی اوقات جواب درست نمی دهد بعضی اوقات تعداد کامپیوتر ها را افزایش می دهیم آن انتظاری که داریم بدست نمی آید گاهی اوقات بی تاثیر است و حتی بدتر جواب می دهد برای اینکه بفهمیم یک مسئله خوب جواب می دهد یا نه باید یکسری ارزیابی روی آن الگوریتم انجام بدهیم تعدادی از عوامل اصلی هستند و تعدادی از عوامل از روی این عوامل اصلی بدست می آیند چه عواملی در تحلیل برنامه های موازی تاثیر دارد :.زمان موازی یا فاصله t(p) : یعنی یک الگوریتم داریم با p پردازنده می خواهد کار کند.کار( work ) w(p) نکته.عوامل زمان موازی و کار عوامل اصلی هستند که عوامل دیگر از روی این عامل بدست می آیند نکته.جنس عوامل زمان موازی و کار زمان است پارامترهای ارزیابی :.تسریع.کارایی 3.بهره وری 4.دوباره کاری یک کار موازی زمانی که روی p پردازنده انجام می شود این ها با همدیگه یک کار رو انجام می دهند. ممکن است کامپیوتر اول یک قسمت از کار ر انجتم بدهد بعد متوقف شود و سپس کامپیوترهای دوم و سوم شروع به محاسبات کند و زمانی که کار کامپیوتر دوم و سوم تمام شد کامپیوتر اول شروع کند به کار کردن و به کامپیوتر چهارم دستور دهد که یک محاسباتی انجام دهد و همچنین کامپیوتر چهارم الزم بداند کامپیوتر دوم و سوم را درگیر خودش کند و کامپیوتر چهارم کامپیوتر اول را از نتیجه ی نهایی با خبر کند. زمان موازی برابر است با از اولین لحظه ای که اولین کامپیوتر برای محاسبات شروع به کار می کند تا زمانی که آخرین کامپیوتر کار خود را تمام می کند برای انجام آن محاسبات خاص به این فاصله زمانی t(p) می گویند که p پردازنده داریم به عنوان نمونه یک کامپیوتر یک محاسبات را یک دقیقه انجام می دهد و 4 کامپیوتر می گذاریم و این یک دقیقه محاسبات را در زمان 33 ثانیه انجام می دهد.
لزوما این چهار کامپیوتر این محاسبات را در زمان ثانیه انجام نمی دهند و ممکن است کمی بیشتر شود. 4 تا core گذاشتیم زمانش شده است 33 ثانیه که این 33 ثانیه می شود همان t(p) زمان موازی برای حل این مسئله 33 ثانیه خواهد بود معموال دنبال این هستیم که این را به حداقل ممکن برسانیم و مهم ترین بحث پردازش موازی این است که این را کاهش دهد اما برای محاسبه هزینه هایی مانند وقت cpu دارد اتفاق می افتد هر کدام از این cpu ها دارند کار مفیدی انجام می دهند مثال برق مصرف می کنند این قسمت سیاه رنگ دارند کار می کنند و برق مصرف می کنند اگر کامپیوتر اول لحظه هایی که کاری انجام می دهد a,b,c باشد جمع این a,b,c اسمش را می گذازیم w و کامپیوتر دوم را می گذازیم w و کامپیوتر سوم را می گذاریم w3 و... جمع کل اینها را می گذاریم Wp که برابر است با جمع کل کار انجام شده بین t(p) و w(p) رابطه زیر برقرار است : t(p) w(p) t()=w() به عنوان مثال اگر کل کار انجام شده برابر است با 33 ثانیه ممکن است کامپیوتر اول ثانیه و کامپیوتر دوم ثانیه و کامیپوتر سوم ثانیه و... وقت بگذارد جمع کل بیشتر از یک دقیقه که اول کار انتظار داشتیم و بالطبع بیشتر از 33 ثانیه بیشتر وقت گذاشته است. اگر کمتر بشود یک کامپیوتر هم کفایت می کند وقتی که موازی شدند باید مجموع کار انجام شده از زمان کل حتما بیشتر شود در جالتی که یک پردازنده داشته باشیم وقتی می نویسم یک یعنی یک پردازنده بیشتر نداریم و اصال موازی نیست در این الت w,p مساوی هستند کل زمانی که یک کامپیوتر برای حل مسئله با حالتی که p تا کامپیوتر برای حل مسئله در این حالت p تا پردازنده بهتر است مثال اگر یک کامپیوتر یک دقیقه طول بکشد انتظار داریم 33 ثانیه طول بکشد هدف پردازش موازی این است که( t(p)<t( اما کار برایش این اتفاق می افتد که جمع کاری که چهار تا کامپیوتر دارد بیشتر از کاری است که فقط یک کامپیوتر دارد است به دلیل اینکه هزینه هایی دارد که این هزینه ها باعث می شود کار بیشتری انجام دهد( w(p)>w( W=a+b+c W w3 w4 تسریع: تعریف تسریع یا speed up این است که کهر چقدر سریع تر می شود در حالت عادی کار ()t است یعنی در حالت sequential زمانی که p پردازنده می گذاریم t(p) می شود زمان اجرا یا سرعت اجرا برابر است با t(p) نسبت این دو بیانگر سرعت بخشی یا سرعت است به عنوان نمونه در حالت عادی کار یک دقیقه بوده است و چهار کامپیوتر گذاشتیم شده اسن نیم دقیقه به این معنی که تسریع برابر شده است در صورتی که ما انتظار داشتیم 4 برابر شده است بنابراین speed up=
این speed up همیشه از یک بیشتر است چون دنبال بهتر شدن نسبت به حالتی که یک کامپیوتر داریم هستیم اما از یک حدی کمتر خواهد بود و زمانی که p پردازنده می گذاریم انتظار داریم p برابر باشد ولی این امکان اتفاق نمی افتد بنابراین از p کمتر خواهد بود تنها در حالت speed up(p)=p که تنها یک پردازنده داشته باشیم به این معنی که: up(p)= speed در پردازش موازی این قسمت یک کم کم رنگ است طبق ادعای قانون amdohl این خط تا حدی ثابت است از یک حدی به بعد اضافه کردن پردازنده و کامپیوتر هیچ تاثیر ندارد و حتی ممکن است وضعیت بدتر بشود که بهتر نشود در sppedاگر up بتوانیم شرایطی ایجاد کنیم که بجای p بشود( Ѳ)p با هم خوب است در speed up اگر به جای p بتوانیم t(p) هم داشته باشیم باز هم خوب است که به آن تسریع خطی می گویند کار نیم دقیقه up= speed ضریب ثابت برابر است با یعنی به ازای هر پردازنده یکمی کار بهتر شود با 8 پردازنده برابر با و به ازای هر 4 پردازنده برابر شود در اینصورت باز هم می گویم speed up خطی است ضریب ثابتی اتفاق می افتد باید تعداد پردازنده های بیشتری مصرف کنیم ولی باز هم قابل قبول است امت حالت ایده آل نیست هزینه اضافه تری دارد اما مثل حالتی پیش نمی آید به حالتی برود که با افزایش پردازنده ها وضع بدتر بشود حداقل مطما هستیم بهتر می شود اگر بتوانیم این شرایط هم داشته باشیم باز هم خوب است 4 مشکل اصلی speed up قانون بدی است به نام قانون amdohl در این قانون speedدارای up حد و مرزی است تعریف speed up در قانون amdohl بصورت زیر است : s(p) = f + f p min ( f, p)
f مخفف کلمه fraction است که بخش غیر موازی پردازش موازی است همین f رو هم همین یکی و دو عامل کم و زیاد می کند کار I/O و کار هماهنگی و کار زیاد عمل send/receive کاری که رقابت زیاد است در آن ها در این شرایط ما f باالیی خواهیم داشت قسمت sequential کار بهتر از قسمت موازی کار است رابطه ها پیش نیازی است جاهایی که هم نیازی f- است اگر 0=f در اینصورت s(p)=p در اینصورت s(p)= f 0 f اگر =p و f S(p) ایده آل خط صاف است و هیچگاه این خط صاف اتفاق نمی افتد برعکس افت پیدا می کند و به یک خط ثابتی به اندازه ی می رسد بی نهایت حدش برابر است با f یعنی آن قسمت sequential حرف آخر را می زند در قانون amdohl ممکن است نقد ها و تغییر هایی در فرمول شده است بعضی اوقاات ممکن است وضعیت در شرایطی بدتر هم بشود ولی حداقلش این است که با افزایش پردازنده نمی توان انتظار speed up برابر با f داشت مثال کار یک دقیقه ای رسید به ثانیه دیگر ثانیه می ماند هر چه قدر پردازنده اضافه کنیم دیگر بهتر از ثانیه نمی شود متاسفانه این قانون بد پردازش موازی است که ما نتوانیم برنامه ها را تا حدی وسیع کنیم باید برسی کنیم این قسمت ها رو کم کنیم یعنی چاره ای جز کم کردن میزان f نداریم تا بتوانیم speed up مناسبی دریافت بکنیم
کارایی یا :efficient نسبت s(p) به p را کارایی گویند که حداکثر برابر است اما معموال خیلی کمتر از خواهد بود طبق قانون amdohl هرچه پردازنده ها را افزایش دهیم کارایی به شدت افت پیدا می کند یعنی ما داریم هزینه می کنیم و هیچ سودی نمی بریم e(p) = s(p) p پارامتر کارایی از فرمول زیر بدست می آید : بهره وری یا : utilize استفاده مناسب از منابع را بهره وری گویند چقدر از منابعی که داریم استفاده بهینه کردیم زمانی بهره وری است که قسمت سفید رنگ پیدا نشود و یا گم شود بهره وری عبارت است از نسبت قسمت سیاه رنگ به کل زمان مصرف بهره وری از فرمول زیر بدست می آید u(p) = w(p) p t(p) تعداد کامپیوتر ها :p :W(p) قسمت سیاه رنگ T(p) : هر کدام چقدر وقت تلف کردند کار مفیدشان بیشتر از w(p) نبوده است هدف بهره بری این است که برابر با یا 00% برسد فقط زمانی بهره بری به یک یا 00% می رسد که از یک کامپیوتر یا پردازنده استفاده کنیم دوباره کاری : نسبت w(p) به ()w را دوباره کاری می گویند.دوباره کاری همیشیه مقداری بزرگ تر یا مساوی دارد به دلیل اینکه I/O ها و هزنیه هایی که جهت هماهنگی که داریم کار انجام شده در حالتی که یک کامپیوتر داشت باشیم زیاد خواهد بود سوال جمع n عدد که 6=n و 8=p زمان مصرفی در حالتی که یک پردازنده داریم برای جمع n عدد برابر هزینه جمع زدن را یک ثانیه فرض می کنیم حالت اول هزینه ارتباط برابر است با صفر قانیه
حالت دوم هزینه ارتباط برابر است با یک ثانیه www.shz-soft.blogfa.com
حالت اول حالت دوم T(p)=4 T(p)=4+3 W(p)=5 W(5)=5+7= S(p)=t() t(p) 4 S(p)= t() =. 4 t(p) 7 E(p)= s(p) = 0. 7 E(p)=s(p) p = 3.75 w(p) U(p)= = 5 = 0.47 p t(p) 8 4 R(p)= w(p) w() = 5 5 = 8 = 0.47 =.4 p 8 U(p)= w(p) = 0.039 p t(p) R(p)=/47 همانطور که مالحظه می کنید تنها یک پارامتر دیده می شود اما پارامتر دیگری نیز استفاده می شود و آن حجم مسئله است ما با 8 کامپیوتر داریم عدد را با هم جمع می زنیم حاال اگر به جای 8 کامپیوتر 4 تا داشتیم چه اتفاقی می افتاد آیا می توان عدد را با 4 کامپیوتر جمع زد می آییم تقسیم می کنیم و هر کامپیوتر اعداد بیشتری را جمع بزند جواب هایشان را با یکدیگر به اشتراک بگذارند بنابراین می شود تعاد پردازنده ها کم باشد و تعداد کامپیوتر ها زیاد باشد پس باید عامل n را باید در همه ی این روابط در نظر گرفت به اختصار این فرمول ها را به این صورت نمایش می دهند : T(p,n)=t p (n) w(p,n)=w p (n) در صورتی که محدودیت پردازنده نداشته باشیم و هزینه ارتباطی نداشته باشیم از مرتبه ی (n O(log قانون خوب یا قانون : brant فرمول قانون برنت : نتایجی که از قانون برنت بدست می آید:.اگر توازی سازی= t() p t() t(p) t( ) + p t() t( ) همین جا که کاری که در زمان n می شود در زمان سازی در این مسئله باال است بسیار باال باشد ولی تعداد پردازنده ها کوچک باشد در اینصورت speed up تقریبا خطی است مثال در log n انجام می شود نسبت n به log n خیلی باال است بنابراین توازی
. t(p) t (p) منظور از (p) t بهترین الگوریتم زمان بدی چند پردازنده ای است O() O(n) O(n a ) a O(n a ) a O(a n ) O(a bn ) O(log n) O(log log n) O(log k n ) زمان ثابت زمان خطی چند جمله ای فوق خطی چند جمله ای بدون خطی نمایی فوق نمایی لگاریتمی لگاریتم دوبل Polylogarithmic مقایسه دو الگوریتم دارای : O بعضی وقت ها مرتبه هاشون O هم دیگر است اما زمانی که O هم بودن ضریب های ثابتشان با یکدیگر مقایسه می شود به طور مثل n, n(n+) این دو الگوریتم از مرتبه ی n هستند اما ضریب ثابت یکی از الگوریتم ها و الگوریتم دیگر دارای ضریب ثابت است
بنابراین آن الگوریتمی که دارای ضریب ثابت کمتری دارد بهتر است جاهایی که O داریم جرف آخر را O می زندولی جاهایی که O متفاوت است آن الگوریتمی که O کمتری دارد بهتر است مثال n > log n x log n n = ln n ln n = n ln n n ln() = n n =0 نکته : زمانی که ln بکار می رود یعنی لگاریتم عدد در مبنای عدد e یا عدد نپر که بصورت ln نمایش می دهند log b a = ln a ln b log n = ln n نکته : قانون لگاریتم ها با این صورت است و n 0.0 > ln n مثال از دو طرف لگاریتم می گیریم : 0.0 ln(n) > ln(ln n)) مثال log n! > n log n راه حل اول: قضیه استرلینگ : n! = Πn ( n e )n ( + α n ) در هر!n فقط مقدار α تغییر می کند ار دو طرف ln می گیریم که ln حاصل ضرب می شود جمع ln ها ln(n!) = ln Πn + n ln( n e ) + β ln(πn) + n(ln(n) ) + β n ln(n) راه حل دوم :
log n! = log + log + log 3 + + log n= بطور مثال : + + 3 + + n = O(n 3 ) = n(n+)(n+) 6 با کمک انتگرال گیری می توان O را بدست آورد اگر یک سری مانند f()+f()+f(3)+...+f(n) داشته باشیم که صعودی یا نزولی باشد که عمدتا صعودی باید باشد کل این از مرتبه f(n) خواهد n بود که f(n) برابر است با f(x) dx توابع بازیگشتی می تواند به فرم های مختلفی باشد تعدادی از فرم های توابع بازگشتی عبارتند از :. t(n) = t(n ) + f(n). t ( n b ) + g(n) 3. t(n) = [at(n ) + b(t ) + ] + f(n) نکته:به فرم شماره دوم فرم مستر می گویند مثال نکته:یکی از مسائلی که در فرم شماره سوم کاربرد دارد مسئله ی فیبوناچی است t(n) = t(n ) + f(n) t > { t() = t = T(n-)=t(n-)+f(n-)
T(n-)=t(n-3)+f(n-) T(n-3)=t(n-4)+f(n-3)... T()=t()+f() بصورت تلسکوپی خط می خورد بنابراین t(n) بصورت زیر خواد بود : t(n) = t() + [f() + f(3) + f(4) + + f(n)] هر تابعی که باشد با انترگال گرفتن می توان O آن را بدست آورد t(n) = t() + [f() + f(3) + f(4) + + f(n)] t()=0 [f() + f(3) + f(4) + + f(n)] +3+ n= +n *(n-) T(n)=Ѳ(n ) بنابراین که تصاعد حسابی است و برابر است با T()=0 T(n)=t(n-)+log n تمرین T(n)=t( n ) + n T()= مثال
اگر ما مقدار دقیق تابع را بخواهیم از روش درختی استفاده می کنیم اما اگر تنها O را بخواهیم از قضیه ای به نام قضیه مستر استفاده می کنیم باید تعداد ()t با تعداد مربع ها جمع بشود تا بتوانیم O آنرا بدست آوریم بنابراین مجموع مربع ها برابر است با تعداد الیه ها ضرب در تعداد مربع ها و تعداد ()t برابر است با n
= n log n + n t() =O(nlog n) مثال T()=0 t(n) = t ( n ) + log n t(n) = t() + log n + log n + log n + log ] 4 log n = k log n = log n log =k- log n 4 = k
T(n)=k+(k-)+(k-)+ + = = k (k+) log n (log(n) + ) =O(log n)